package com.stud.common.core.page;

import com.github.pagehelper.Page;
import com.stud.common.core.text.Convert;
import com.stud.common.utils.PageUtils;
import com.stud.common.utils.ServletUtils;
import com.stud.common.utils.StringUtils;

import java.util.Objects;

/**
 * 表格数据处理
 *
 * @author Stud
 */
public class TableSupport {
    /**
     * 当前记录起始索引
     */
    public static final String PAGE_NUM = "pageNum";

    /**
     * 每页显示记录数
     */
    public static final String PAGE_SIZE = "pageSize";

    /**
     * 排序列
     */
    public static final String ORDER_BY_COLUMN = "orderByColumn";

    /**
     * 排序
     */
    public static final String ORDER_BY = "orderBy";

    /**
     * 排序的方向 "desc" 或者 "asc".
     */
    public static final String IS_ASC = "isAsc";

    /**
     * 分页参数合理化
     */
    public static final String REASONABLE = "reasonable";

    /**
     * 封装分页对象
     */
    public static PageDomain getPageDomain() {
        Page<Object> localPage = PageUtils.getLocalPage();
        if (Objects.isNull(localPage)) {
            return buildPageRequest();
        }

        PageDomain pageDomain = new PageDomain();
        pageDomain.setPageNum(localPage.getPageNum());
        pageDomain.setPageSize(localPage.getPageSize());
        pageDomain.setOrderBy(localPage.getOrderBy());
        pageDomain.setReasonable(localPage.getReasonable());
        return pageDomain;
    }

    public static PageDomain buildPageRequest() {
        PageDomain pageDomain = new PageDomain();
        pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
        pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
        pageDomain.setOrderBy(ServletUtils.getParameter(ORDER_BY));
        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
        pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));

        if (StringUtils.isBlank(pageDomain.getOrderBy()) && !StringUtils.isBlank(pageDomain.getOrderByColumn())) {
            String order = StringUtils.toUnderScoreCase(pageDomain.getOrderByColumn());
            if (!StringUtils.isBlank(pageDomain.getIsAsc())) {
                order += " " + pageDomain.getIsAsc();
            }
            pageDomain.setOrderBy(order);
        }

        return pageDomain;
    }

}





















